package com.xiaoq.shop.service;

import com.xiaoq.shop.entity.CouponEntity;
import com.xiaoq.shop.vo.CouponVO;
import com.xiaoq.vo.PagingVo;

import java.util.List;

public interface ICouponService {

    /**
     * 根据根据ID，查询已生效优惠券列表,expireDate为null时，得到所有的券，按expireDate倒序排序
     * @param shopId 店（景区）ID
     * @param expireDate 小于expireDate时间,可为null
     * @return
     */
    List<CouponVO> getAllCouponList(String shopId, Long expireDate);

    /**
     * 根据根据ID，查询小于expireDate的优惠券,expireDate为null时，得到所有的券，按expireDate倒序排序
     * @param shopId 店（景区）ID
     * @return
     */
    List<CouponVO> getAvailableCouponList(String shopId);

    /**
     *  根据主键查询优惠券信息
     * @param couponId
     * @return
     */
    CouponEntity getCouponById(String couponId);


    /**
     * 添加优惠券
     * @param couponEntity
     * @return
     */
    boolean save(CouponEntity couponEntity);

    /**
     * 修改优惠券信息
     * @param couponEntity
     * @return
     */
    boolean updateById(CouponEntity couponEntity);

    /**
     *  领优惠券数 + 1
     * @param couponId 券ID
     * @return
     */
    boolean incTakenCountPlus1(String couponId);

    /**
     * 分页查询优惠券信息
     * @param shopId 景区id
     * @param type all,wait,start,end 4种类型
     * @param pagingVo 分页
     * @return
     */
    List<CouponEntity> getAllCouponList(String shopId, String type, PagingVo pagingVo);

    /**
     * 分页查询优惠券信息 数量
     * @param shopId 景区id
     * @param type all,wait,start,end 4种类型
     * @return
     */
    long getAllCouponListCount(String shopId, String type);


    /**
     * 查询需要发通知的优惠券列表
     * @param notify
     * @return
     */
    List<CouponEntity> getAllCoupon4NotifyNotExpired(Integer notify);

    /**
     *  根据标题从Es里搜索优惠券
     * @param sitesId 景区id
     * @param title 标题
     * @param pagingVo 分页相关
     * @return
     */
    List<CouponEntity> getCouponListFromEs(String sitesId, String title,PagingVo pagingVo);

}
